package com.adil.base.collections.list;


import java.util.ArrayList;
import java.util.Arrays;
import java.util.LinkedList;
import java.util.List;

/**
 * @description: List 接口
 * @author: Adil
 * @date: 2024/4/24
 */
public class ListDemo {
    public static void main(String[] args) {
        // List 接口是 Java 集合框架中的一部分，它是一种有序的、可重复的元素集合。List 接口提供了对元素进行添加、删除、修改、遍历等操作的方法。
        // List 接口的主要实现类有 ArrayList、LinkedList、Vector 等。
        // ArrayList 是一个动态数组，它可以自动扩容，因此在添加元素时不需要重新分配内存。
        // LinkedList 是一个双向链表，它可以快速地在头部和尾部进行插入和删除操作。
        // Vector 是一个同步的 ArrayList，它是线程安全的。 Vector 实现了 Enumeration 接口，因此可以用 Enumeration 遍历 Vector。
        // ArrayList 和 LinkedList 和 Vector 的区别：
        // 1. 实现方式：ArrayList 和 LinkedList 是通过数组和链表实现的，而 Vector 是通过数组和链表实现的。
        // 2. 线程安全：ArrayList 和 LinkedList 是非线程安全的，而 Vector 是线程安全的。
        // 3. 扩容：ArrayList 和 LinkedList 都可以自动扩容，而 Vector 不能自动扩容。
        // 4. 性能：ArrayList 和 LinkedList 都比 Vector 快，因为它们都使用了数组。
        // 5. 遍历：ArrayList 和 LinkedList 可以通过迭代器进行遍历，而 Vector 不能通过迭代器进行遍历。
        // 6. 性能：ArrayList 和 LinkedList 都比 Vector 快，因为它们都使用了数组。
        // 7. 内存占用：ArrayList 和 LinkedList 都比 Vector 小，因为它们都使用了数组。
        // 8. 其他：ArrayList 和 LinkedList 都可以指定初始容量，而 Vector 不能指定初始容量。
        // 9. 选择：ArrayList 和 LinkedList 都是线程不安全的，但是它们都比 Vector 快。如果需要线程安全的 List，建议使用 Vector。
        // 10. 总结：ArrayList 和 LinkedList 都是 List 接口的主要实现类，它们都可以快速地对元素进行添加、删除、修改、遍历等操作。
        // 11. 建议：如果不需要对元素进行随机访问，建议使用 ArrayList，如果需要对元素进行随机访问，建议使用 LinkedList。

        //List 接口的常用方法：
        //add(E e)：添加元素到列表末尾
        //remove(int index)：删除指定位置的元素
        //get(int index)：获取指定位置的元素
        //set(int index, E element)：修改指定位置的元素
        //size()：获取列表的大小
        //isEmpty()：判断列表是否为空
        //contains(Object o)：判断列表是否包含指定元素
        //clear()：清空列表
        //addAll(Collection<? extends E> c)：将指定集合中的所有元素添加到列表末尾
        //iterator()：返回列表的迭代器
        //toArray()：将列表转换为数组
        //subList(int fromIndex, int toIndex)：返回列表的子列表
    }

}
